home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / nihcl-30.lha / nihcl-3.0 / vector / DoubleVect.c < prev    next >
C/C++ Source or Header  |  1990-05-16  |  2KB  |  93 lines

  1. /* DoubleVect.c -- Data type-specific functions for class DoubleVec
  2.  
  3.     THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A
  4.     "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE
  5.     AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT
  6.     CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE
  7.     PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO
  8.     RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.
  9.  
  10. Author:
  11.     K. E. Gorlen
  12.     Bg. 12A, Rm. 2033
  13.     Computer Systems Laboratory
  14.     Division of Computer Research and Technology
  15.     National Institutes of Health
  16.     Bethesda, Maryland 20892
  17.     Phone: (301) 496-1111
  18.     uucp: uunet!nih-csl!kgorlen
  19.     Internet: kgorlen@alw.nih.gov
  20.     June, 1986
  21.  
  22. Function:
  23.     
  24. Data type -specific functions for class DoubleVec.
  25.  
  26. Modification History:
  27.  
  28. $Log:    DoubleVect.c,v $
  29.  * Revision 3.0  90/05/16  23:00:30  kgorlen
  30.  * Release for 1st edition.
  31.  * 
  32. */
  33.  
  34. #include "DoubleVec.h"
  35. #include "FloatVec.h"
  36. #include "nihclconfig.h"
  37. #include "nihclIO.h"
  38. #include <iomanip.h>
  39. #include <libc.h>
  40.  
  41. #define    THIS    DoubleVec
  42. #define    BASE    Vector
  43.  
  44. // Conversion from float to double.  Added by tk.
  45. DoubleVec::DoubleVec(const FloatVec& fv) :
  46.        BASE(fv.length())
  47. {
  48.   v = NULL;
  49.   if(n){
  50.     v = new double[n];
  51.     double* dp = v;
  52.     const float* fp = fv.pt();
  53.     unsigned i = n;
  54.     while(i--) *dp++ = double(*fp++);
  55.   }
  56. }
  57.  
  58. static int typeCmp(const void* a, const void* b)
  59. {
  60.     double t = *(double*)a-*(double*)b;
  61.     if (t < 0) return -1;
  62.     if (t > 0) return 1;
  63.     return 0;
  64. }
  65.  
  66. void THIS::sort()
  67. {
  68.     qsort(v,n,sizeof(double),typeCmp);
  69. }
  70.  
  71. unsigned THIS::hash() const
  72. {
  73.     unsigned h = n;
  74.     unsigned i = n*div_sizeof_int(sizeof(double));
  75.     unsigned* vv = (unsigned*)v;
  76.     while (i--) h ^= *vv++;
  77.     return h;
  78. }
  79.  
  80. void THIS::printOn(ostream& strm) const
  81. {
  82.     for (unsigned i=0; i<n; i++) {
  83.         if (i>0 && (i%6 == 0)) strm << "\n\t";
  84.         strm << setw(13) << setprecision(5) << v[i];
  85.     }
  86. }
  87.  
  88. void THIS::scanFrom(istream& strm)
  89. {
  90.     extern const int NIHCL_NYET;
  91.     setError(NIHCL_NYET,DEFAULT,className(),"scanFrom");
  92. }
  93.